<?php

class Oauth {
    //获得全局access_token
    public function get_token() {
        //如果已经存在直接返回access_token
        if (session('access_token') && session('expire_time') > time()) {
            return session('access_token');
        } else {
            //1.请求url地址
            $appid = C('WX_APPID');
            $appsecret = C('WX_APPSECRET');
            //appsecret
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
            //请求地址
            //2初始化curl请求
            $ch = curl_init();
            //3.配置请求参数
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
            curl_setopt($ch, CURLOPT_URL, $url);//请求
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出数据
            //4.开始请求
            $res = curl_exec($ch);//获取请求结果
            if (curl_errno($ch)) {
                //        curl_error($ch)
                return false;
            }
            //5.关闭curl
            curl_close($ch);
            $arr = json_decode($res, true);//将结果转为数组
            session('access_token', $arr['access_token']);//将access_token存入session中，可以不存，每次都获得新的token
            session('expire_time', time() + 7200);  // 2小时过期
            return $arr['access_token'];
        }
    }

    //    参数：发送给谁openid,客户姓名，客户电话，推荐楼盘（参数自定）

    /**
     * 推送模板信息
     * @param $openid  收到模板消息的用户的openid
     * @param $data  模板内容，不填则下发空模板
     * @param $form_id  表单提交场景下，为 submit 事件带上的 formId；支付场景下，为本次支付的 prepay_id
     * @param $template_id  模板id（具体到公众平台申请）
     * @param $pages  跳转的小程序页面
     * @return mixed
     */
    function sendMessage($template_id, $data, $form_id, $openid, $pages = 'pages/index/index') {
        //获取全局token
        $token = $this->get_token();
        $url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" . $token;
        //模板信息请求地址
        //发送的模板信息(微信要求json格式，这里为数组（方便添加变量）格式，然后转为json)
        $post_data = array(
            "template_id" => $template_id,
            "data"        => $data,
            "form_id"     => $form_id,
            "touser"      => $openid,
            'page'        => $pages,
        );
        //将上面的数组数据转为json格式
        $post_data = json_encode($post_data);
        //发送数据，post方式<br>　//配置curl请求
        $ch = curl_init();//创建curl请求
        curl_setopt($ch, CURLOPT_URL, $url); //设置发送数据的网址
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置有返回值，0，直接显示
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //禁用证书验证
        curl_setopt($ch, CURLOPT_POST, 1);//post方法请求
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//post请求发送的数据包
        //接收执行返回的数据
        $data_res = curl_exec($ch);
        //关闭句柄
        curl_close($ch);
        $data_res = json_decode($data_res, true); //将json数据转成数组
        //记录到日志
        M('wxsend_log')->add(array(
            'openid'      => $openid,
            'formid'      => $form_id,
            'template_id' => $template_id,
            'send_data'   => $post_data,
            'errcode'     => $data_res['errcode'],
            'errmsg'      => $data_res['errmsg'],
        ));
        if ($data_res['errcode'] != 0) {
            return false;
        }
        return $data_res;
    }
    /*//获取模板信息-行业信息（参考，示例未使用）
    function getHangye() {
        //用户同意授权后，会传过来一个code
        $token = $this->get_token();
        $url = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=" . $token;
        //请求token，get方式
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($data, true); //将json数据转成数组
        //return $data["access_token"];
        return $data;
    }*/
}